package homework;

import jdk.swing.interop.SwingInterOpUtils;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/*
定义一个标准的JavaBean，名叫Person，包含属性name、age。
使用反射的方式创建一个实例、调用构造函数初始化name、age，使用反射方式调用setName方法对名称进行设置，
不使用setAge方法直接使用反射方式对age赋值。
*/
public class Test3 {
    public static void main(String[] args) throws Exception {
        //创建class对象
        Class clazz = Class.forName("homework.Person");


        Constructor constructor = clazz.getConstructor(String.class, int.class);
        Person person= (Person) constructor.newInstance("李云龙", 18);
        System.out.println(person);

        //调用setName
        Method setName = clazz.getMethod("setName", String.class);
        Object o1 = setName.invoke(person, "张三");

        //获取field对象
        Field age = clazz.getDeclaredField("age");
        //暴力反射
        age.setAccessible(true);
        //赋值
        age.set(person,23);
        System.out.println(person);
    }
}
